C/C++

推荐列表 站点导航

当前位置:首页 > 脚本编程 > C/C++ >

C++_C++模板类的用法实例,本文实例讲述了C++中模板类的

来源:网络整理  作者:  发布时间:2020-12-20 13:29
C++模板类的用法实例,本文实例讲述了C++中模板类的用法,分享给大家供大家参考。具体方法如下://#include...

//#include "StdAfx.h #ifndef __AFXTLS_H__ #define __AFXTLS_H__ #include <Windows.h> class CSimpleList { public: CSimpleList(int nNextOffset=0); void Construct(int nNextOffset); //接口 BOOL IsEmpty() const; void AddHead(void *p); void RemoveAll(); void* GetHead() const; void* GetNext(void* preElement) const; BOOL Remove(void* p); //为实现接口所需的成员 void *m_pHead; size_t m_nextOffset; void** GetNextPtr(void* preElement) const; }; //类的内联函数 inline CSimpleList::CSimpleList(int nNextOffset) {m_pHead = NULL; m_nextOffset = nNextOffset; } inline void CSimpleList::Construct(int nNextOffset) {m_nextOffset = nNextOffset; } inline BOOL CSimpleList::IsEmpty() const { return m_pHead==NULL; } //inline void AddHead(void *p) //{ // //} inline void CSimpleList::RemoveAll() { m_pHead = NULL; } inline void* CSimpleList::GetHead() const { return m_pHead; } inline void* CSimpleList::GetNext(void* preElement) const { return *GetNextPtr(preElement); } //inline BOOL CSimpleList::Remove(void* p) //{ // //} inline void** CSimpleList::GetNextPtr(void* preElement) const { return (void**)((BYTE*)preElement+m_nextOffset); } //定义模板类 template<class TYPE> class CTypedSimpleList:public CSimpleList { public: CTypedSimpleList(int nNextOffset=0) :CSimpleList(nNextOffset){} void Construct(int nNextOffset); //接口 void AddHead(TYPE p) { CSimpleList::AddHead((void*)p); } TYPE GetHead() { return (TYPE)CSimpleList::GetHead(); } TYPE GetNext(TYPE preElement) { return (TYPE)CSimpleList::GetNext((void*)preElement); } BOOL Remove(TYPE p) { return CSimpleList::Remove(p); } //直接引用类的对象会调用此函数 operator TYPE() { return (TYPE)CSimpleList::GetHead(); } }; #endif

//测试模板类 MyThreadData* pTempData; CTypedSimpleList<MyThreadData*> templateList; list.Construct(offsetof(MyThreadData, pNext)); //向链表中加数据 for (int i=100;i<110;i++) { pTempData = new MyThreadData; pTempData->nShortData = i; templateList.AddHead(pTempData); } //遍历链表,释放对象占用的资源 pTempData = templateList; while (pTempData) { MyThreadData* pNextTempData = pTempData->pNext; printf("TemplateDateList=%d\n",pTempData->nShortData); delete pTempData; pTempData = pNextTempData; }

模板类的用法:

相关热词: C++ 实例

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!

本文地址: https://v30.fanwenzhu.com/jiaob/cjj/6112.shtml

最新文章
只需要在调用Ctrl+B编译后 只需要在调用Ctrl+B编译后

时间:2021-01-13

OpenGL超级宝典visual studio OpenGL超级宝典visual studio

时间:2021-01-04

Directx11 教程(2) 基本的wi Directx11 教程(2) 基本的wi

时间:2021-01-04

LeetCode11ContainerWithMostWate LeetCode11ContainerWithMostWate

时间:2021-01-04

C语言简单IT之家速成 C语言简单IT之家速成

时间:2020-12-27

三分钟了解Activity工作流 三分钟了解Activity工作流

时间:2020-12-27

编译器是如何实现32位整型 编译器是如何实现32位整型

时间:2020-12-27

C++中lower_bound函数和upper C++中lower_bound函数和upper

时间:2020-12-27

Copyright © www.juheyunku.com      关于 | 合作 | 声明 | 联系 | 更新 | 地图 | Tags

C++_C++模板类的用法实例,本文实例讲述了C++中模板类的

2020-12-20 编辑:

//#include "StdAfx.h #ifndef __AFXTLS_H__ #define __AFXTLS_H__ #include <Windows.h> class CSimpleList { public: CSimpleList(int nNextOffset=0); void Construct(int nNextOffset); //接口 BOOL IsEmpty() const; void AddHead(void *p); void RemoveAll(); void* GetHead() const; void* GetNext(void* preElement) const; BOOL Remove(void* p); //为实现接口所需的成员 void *m_pHead; size_t m_nextOffset; void** GetNextPtr(void* preElement) const; }; //类的内联函数 inline CSimpleList::CSimpleList(int nNextOffset) {m_pHead = NULL; m_nextOffset = nNextOffset; } inline void CSimpleList::Construct(int nNextOffset) {m_nextOffset = nNextOffset; } inline BOOL CSimpleList::IsEmpty() const { return m_pHead==NULL; } //inline void AddHead(void *p) //{ // //} inline void CSimpleList::RemoveAll() { m_pHead = NULL; } inline void* CSimpleList::GetHead() const { return m_pHead; } inline void* CSimpleList::GetNext(void* preElement) const { return *GetNextPtr(preElement); } //inline BOOL CSimpleList::Remove(void* p) //{ // //} inline void** CSimpleList::GetNextPtr(void* preElement) const { return (void**)((BYTE*)preElement+m_nextOffset); } //定义模板类 template<class TYPE> class CTypedSimpleList:public CSimpleList { public: CTypedSimpleList(int nNextOffset=0) :CSimpleList(nNextOffset){} void Construct(int nNextOffset); //接口 void AddHead(TYPE p) { CSimpleList::AddHead((void*)p); } TYPE GetHead() { return (TYPE)CSimpleList::GetHead(); } TYPE GetNext(TYPE preElement) { return (TYPE)CSimpleList::GetNext((void*)preElement); } BOOL Remove(TYPE p) { return CSimpleList::Remove(p); } //直接引用类的对象会调用此函数 operator TYPE() { return (TYPE)CSimpleList::GetHead(); } }; #endif

//测试模板类 MyThreadData* pTempData; CTypedSimpleList<MyThreadData*> templateList; list.Construct(offsetof(MyThreadData, pNext)); //向链表中加数据 for (int i=100;i<110;i++) { pTempData = new MyThreadData; pTempData->nShortData = i; templateList.AddHead(pTempData); } //遍历链表,释放对象占用的资源 pTempData = templateList; while (pTempData) { MyThreadData* pNextTempData = pTempData->pNext; printf("TemplateDateList=%d\n",pTempData->nShortData); delete pTempData; pTempData = pNextTempData; }

模板类的用法:

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供学习参考!
本文地址为 https://v30.fanwenzhu.com/jiaob/cjj/6112.shtml

相关文章

风云图片

推荐阅读

返回C/C++频道首页